'''
@Project :my_python_project
@PRODUCT :PyCharm
@File    :sys模块.PY
@IDE     :PyCharm
@Author  :xionglinhui
@Date    :2024/9/8 9:42
'''

'''进度条的效果
[#             ]
[##            ]
[###           ]
[####          ]
'''


import sys
import time

'''知识储备'''
# %-15s：表示一个左对齐，最小宽度为15个字符
# #  %15s：表示一个右对齐，最小宽度为15个字符
print('[%15s]' %'#')     # 输出：[              #]
print('[%-15s]' %'#')    # 输出：[#              ]

#打印%
# %s 是一个占位符，表示一个字符串。在这个例子中，它将被替换为 100。
# %% 是一个特殊的占位符，表示一个字面的 % 字符。因为在格式化字符串中，% 是一个特殊的字符，用于引入占位符，所以如果你想在结果字符串中包含一个字面的 %，你需要使用 %%。
print('%s%%' %(100)) #第二个%号代表取消第一个%的特殊意义


'''案例1：模拟出进度条'''
for i in range(50):
    time.sleep(0.1)
    percent = (i+1) / 50
    res = int(50*percent) * '#'
    if percent >= 1:
        percent = 1
    #在Python中，\r是一个特殊的转义字符，表示回车（CarriageReturn）
    #需要注意的是，\r只会影响到光标的位置，它不会删除或替换光标后面的字符。如果你想在打印时覆盖整行，你需要在字符串的末尾添加 \r，然后立即打印新的内容。例如：
    print('\r[%-50s] %d%%' %(res,int(100*percent)), end='') # end='' 表示输出内容的末尾添加一个空字符串


'''案例2：打印下载时的进度条'''


def progress(percent, width=50):
    if percent >= 1:
        percent = 1
    time.sleep(0.1)
    res = int(width*percent)*'#'
    print('\r[%-50s] %d%%' %(res,int(100*percent)), end='')



date_size = 102222
recv_size = 0

while recv_size < date_size:
    time.sleep(0.01)
    recv_size += 1024
    percent = recv_size / date_size
    progress(percent, width=50)

'''3、疑点：如何将上述打印中的width -50 写活？？？'''

def process(width1):
    for i in range(width1):
        time.sleep(0.1)
        percent = (i+1) / width1
        res = int(width1 * percent) * '#'
        if percent >= 1:
            percent = 1
     # 关键写法如下，width不变=已打印的进度##  +  未打印的空部分''
        print('\r[%s%s] %d%%' % ('=' * int(width1 * percent), ' ' * (width1 - int(width1 * percent)), int(percent * 100)), end='')

process(50)









